<?php
/**
 * @package payma_svn
 * @subpackage package_name
 * @author Ricardo Santillán Reyes
 * @copyright (c) Instituto Tecnológico de Jiquilpan
 * @license Vea LICENCIA en el directorio raiz de este proyecto
 * @date Junio-Septiembre 2008
 * 
 */

//Constantes para permitir la ejecucion de un archivo directamente
defined("_AS") or define("_AS",1); //AS = ArqSys

//Seguridad, evitamos que se modifiquen los arreglos del servidor
$proteje = array('_REQUEST', '_GET', '_POST', '_COOKIE', '_FILES', '_SERVER', '_ENV', 'GLOBALS', '_SESSION');
foreach ($proteje as $prote) {
    if ( in_array($prote , array_keys($_REQUEST)) ||
    in_array($prote , array_keys($_GET)) ||
    in_array($prote , array_keys($_POST)) ||
    in_array($prote , array_keys($_COOKIE)) ||
    in_array($prote , array_keys($_FILES)))
    
    die("Petici&oacute;n no v&aacute;lida.");
}

/**
 * Constantes necesarias para la funcion obtenParametro
 */
define('_NO_TRIM',0x0001);
define('_PERMITE_HTML',0x0004);
define('_NUMERICO',0x0008);
 
/**
 * Función que permite obtener valores de _GET, _POST,etc., puede recivir un 
 * valor por defecto, para en caso de no encontrar el valor buscado, retornar este.
 * Tambien puede recivir una mascara binaria para permitir HTML, o quitar espacios,
 * o permitir barras (/), etc, los valores permitidos son:
 * 	_NO_TRIM, _PERMITE_HTML, _NUMERICO
 * 
 * @param array arr Arreglo donde buscar el parametro
 * @param string nom Nombre del parametro
 * @param string def Valor devuelto en caso de que no exista el parametro
 * @param binary mask Mascara para 'parsear' el parametro se puede utilizar _NO_TRIM, _PERMITE_HTML, _NUMERICO 
 */
function getParametro(&$arr,$nom,$def=null,$mask=0){
	if (isset( $arr[$nom] )) {
        if (is_array($arr[$nom])) foreach ($arr[$nom] as $key=>$ele) $res[$key] = getParametro ($arr[$nom], $key, $def, $mask);
        else {
            $res = $arr[$nom];
            if (!($mask&_NOTRIM)) $res = trim($res);
            if (!is_numeric( $res)) {
                if (!($mask&_PERMITE_HTML)) $res = strip_tags($res);
                if (!($mask&_NUMERICO)) {
                    if (is_numeric($def)) $res = intval($res);
                }
            }
            if (!get_magic_quotes_gpc()) {
                $res = addslashes( $res );
            }
        }
        return $res;
    } else {
        return $def;
    }
}


//Soporte a versiones anteriores de PHP
if (phpversion() < '4.2.0') require_once( '../includes/compat.php41x.php' );
if (phpversion() < '4.3.0') require_once( '../includes/compat.php42x.php' );
if (phpversion() < '5.0.0') require_once( '../includes/compat.php5xx.php' );

//Soporte para "traduccion" PHP-GETTEXT
include_once('../includes/php-gettext/streams.php');
include_once('../includes/php-gettext/gettext.php');

function __($texto) {
    global $gettext_tables;

    if (is_null($gettext_tables)) return $texto;
    else return $gettext_tables->translate($texto);
}

//SEF Urls?
function indexType($val='') 
{
    static $indextype;
    if (is_null($indextype)) {
        $indextype = ($val == '') ? 1 : $val;
    } else {
        $indextype = ($val == '') ? $indextype : $val;
    }
    return $indextype;
}

if (!isset($indextype)) $indextype = 1;
indexType($indextype);
$indextype = indexType();
//TODO SEFS URLS require_once($objClases->raizSitio() . '/includes/sef.php');

require_once ('../includes/BaseDatos.php');
//Clases de PaYma
require_once ('../includes/Clases.php');
$objClases =& Clases::getClases();

//Reporte de errores
if($objClases->get('reporte_errores') === 0)
    error_reporting(0);
else if($objClases->get('reporte_errores') >0)
    error_reporting($objClases->get('reporte_errores'));


//Base de Datos
static $basedatos;
if (!is_object($basedatos)) $basedatos = new MainBaseDatos();
$basedatos->debug(Clases::get('debug'));

//Declarar todas las variables como globales, y variables globales cortas
$objClases->registerGlobales();

//Version de este paquete de software
require_once($objClases->raizSitio().'includes/Version.php');

//Clase principal
$principal =& ClasePrincipal::getClasePrincipal($basedatos);
$opcion= strtolower(getParametro($_REQUEST,'sec','main'));
if($opcion == 'login') $mensaje = $objClases->handleLogin();
if(strtolower(getParametro($_REQUEST,'opc','')) == 'logout') $objClases->handleLogout();

$sesion = Sesiones::getSesionActual();
$us = new Usuario();
$us->getSesionData();
Clases::set('usuarioActual',$us);
$objClases->checkOffline($us, $basedatos);
$tema_actual=$principal->getTema();

//Manejador de enlaces
require_once($objClases->raizSitio().'includes/ManejadorEnlaces.php');
$manEnlaces =& ManejadorEnlaces::getManejadorEnlaces();

/*
 * Revisamos en que modo se requiere la pagina
 */
if(getParametro($_GET,'modo','sincrono') == 'asincrono'){
    Clases::getModulo($opcion);
    exit();
}

//Encabezados
function showHead() {
    $principal =& ClasePrincipal::getInstancia();
    $principal->showHead();
}
?>
